const fs = require('fs');
const path = require('path');

// 分类映射表：数字ID -> 分类名称
const categoryMap = {
  '3': '代练通注册',
  '4': '发单接单须知',
  '7': '接单说明',
  '9': '财务',
  '13': '软件使用',
  '29': '发单说明',
  '34': '客服介入',
  '41': '王者荣耀',
  '55': '王者荣耀-发单说明',
  '56': '王者荣耀-接单说明',
  '57': '客服介入-判罚说明',
  '58': '和平精英',
  '60': '和平精英-发单说明',
  '61': '和平精英-接单说明',
  '64': '和平精英-新手攻略',
  '66': '托管发单',
  '76': '英雄联盟',
  '77': '英雄联盟-补分说明',
  '78': '英雄联盟-代练须知',
  '79': '英雄联盟-云顶之弈补分说明',
  '84': '新手学堂',
  '89': '软件使用-未成年人用户说明',
  '37': '英雄联盟',
  'default': '未分类'
};

// 根据URL推断分类
function inferCategoryFromUrl(url) {
  // 匹配 /channels/数字.html
  const channelMatch = url.match(/\/channels\/(\d+)\.html/);
  if (channelMatch) {
    const channelId = channelMatch[1];
    return categoryMap[channelId] || `分类-${channelId}`;
  }
  
  // 匹配 /contents/数字/数字.html
  const contentMatch = url.match(/\/contents\/(\d+)\/\d+\.html/);
  if (contentMatch) {
    const categoryId = contentMatch[1];
    // 根据父分类推断
    if (categoryId === '3') return '代练通注册';
    if (categoryId === '4') return '发单接单须知';
    if (categoryId === '7') return '接单说明';
    if (categoryId === '9') return '财务';
    if (categoryId === '13') return '软件使用';
    if (categoryId === '29') return '发单说明';
    if (categoryId === '34') return '客服介入';
    if (categoryId === '41') return '王者荣耀';
    if (categoryId === '55') return '王者荣耀-发单说明';
    if (categoryId === '56') return '王者荣耀-接单说明';
    if (categoryId === '57') return '客服介入-判罚说明';
    if (categoryId === '58') return '和平精英';
    if (categoryId === '60') return '和平精英-发单说明';
    if (categoryId === '61') return '和平精英-接单说明';
    if (categoryId === '64') return '和平精英-新手攻略';
    if (categoryId === '66') return '托管发单';
    if (categoryId === '76') return '英雄联盟';
    if (categoryId === '77') return '英雄联盟-补分说明';
    if (categoryId === '78') return '英雄联盟-代练须知';
    if (categoryId === '79') return '英雄联盟-云顶之弈补分说明';
    if (categoryId === '84') return '新手学堂';
    if (categoryId === '89') return '软件使用-未成年人用户说明';
    if (categoryId === '37') return '英雄联盟';
    return categoryMap[categoryId] || `分类-${categoryId}`;
  }
  
  return '未分类';
}

// 根据标题推断分类
function inferCategoryFromTitle(title) {
  if (title.includes('代练通注册') || title.includes('注册')) return '代练通注册';
  if (title.includes('发单接单须知') || title.includes('发单接单')) return '发单接单须知';
  if (title.includes('接单说明') || title.includes('接单')) return '接单说明';
  if (title.includes('财务') || title.includes('充值') || title.includes('提现') || title.includes('收费')) return '财务';
  if (title.includes('软件使用') || title.includes('使用说明') || title.includes('app说明') || title.includes('违规处罚') || title.includes('未成年人')) return '软件使用';
  if (title.includes('发单说明') || title.includes('发单流程') || title.includes('发单问题') || title.includes('发单注意')) return '发单说明';
  if (title.includes('客服介入') || title.includes('判罚说明') || title.includes('注意事项')) return '客服介入';
  if (title.includes('王者荣耀')) return '王者荣耀';
  if (title.includes('和平精英')) return '和平精英';
  if (title.includes('英雄联盟') || title.includes('云顶之弈') || title.includes('补分说明')) return '英雄联盟';
  if (title.includes('托管发单')) return '托管发单';
  if (title.includes('新手学堂') || title.includes('新手攻略') || title.includes('保证金')) return '新手学堂';
  return null;
}

// 处理数据文件
function fixCategories(inputFile, outputFile) {
  console.log(`正在读取文件: ${inputFile}`);
  const data = JSON.parse(fs.readFileSync(inputFile, 'utf8'));
  
  let fixedCount = 0;
  
  data.documents.forEach((doc, index) => {
    let newCategory = null;
    
    // 如果当前分类是数字，需要替换
    if (doc.category && /^\d+$/.test(doc.category)) {
      // 首先尝试从映射表获取
      newCategory = categoryMap[doc.category];
      
      // 如果映射表中没有，尝试从URL推断
      if (!newCategory || newCategory.startsWith('分类-')) {
        const urlCategory = inferCategoryFromUrl(doc.url);
        if (urlCategory && !urlCategory.startsWith('分类-')) {
          newCategory = urlCategory;
        }
      }
      
      // 如果还是不行，尝试从标题推断
      if (!newCategory || newCategory.startsWith('分类-')) {
        const titleCategory = inferCategoryFromTitle(doc.title);
        if (titleCategory) {
          newCategory = titleCategory;
        }
      }
      
      // 如果还是不行，使用默认值
      if (!newCategory || newCategory.startsWith('分类-')) {
        newCategory = '未分类';
      }
      
      doc.category = newCategory;
      fixedCount++;
    } else if (doc.category === 'default' || !doc.category) {
      // 对于default或空分类，也尝试推断
      const urlCategory = inferCategoryFromUrl(doc.url);
      const titleCategory = inferCategoryFromTitle(doc.title);
      
      newCategory = urlCategory || titleCategory || '未分类';
      doc.category = newCategory;
      fixedCount++;
    }
  });
  
  console.log(`已修复 ${fixedCount} 个文档的分类`);
  
  // 统计分类
  const categories = {};
  data.documents.forEach(doc => {
    const cat = doc.category || '未分类';
    categories[cat] = (categories[cat] || 0) + 1;
  });
  
  console.log('\n分类统计:');
  Object.entries(categories).sort((a, b) => b[1] - a[1]).forEach(([cat, count]) => {
    console.log(`  ${cat}: ${count} 个文档`);
  });
  
  // 保存文件
  console.log(`\n正在保存到: ${outputFile}`);
  fs.writeFileSync(outputFile, JSON.stringify(data, null, 2), 'utf8');
  console.log('完成！');
}

// 主函数
const inputFile = path.join(__dirname, '../data/help-docs-2025-11-10.json');
const outputFile = path.join(__dirname, '../data/help-docs-2025-11-10.json');

fixCategories(inputFile, outputFile);

